#include <vector>
#include "all.h"

int count = 0;
libco::WaitGroup wg;
libco::CoMutex mutex;

void test_colog(int times) {
    for(int i = 0; i < times; i++) {
        libco::CoMutex::Lock lock(mutex);
        LIBCO_LOG << "current count: " << count;
        ++count;
    }
    wg.done();
}

int main(int argc, char *argv[]) {
    LIBCO_LOG << "start";
    int arg = 10;
    int th_num = 10;
    // std::vector<libco::Thread::ptr> thrs;
    // for(int i = 0; i < th_num; i++) {
    //     // 带参数的线程用std::bind进行参数绑定
    //     libco::Thread::ptr thr(new libco::Thread(std::bind(test_colog, arg), "thread_" + std::to_string(i)));
    //     thrs.push_back(thr);
    // }
    for(int i = 0; i < th_num; i++) {
        wg.add();
        co_func(std::bind(test_colog, arg));
    }

    // for(int i = 0; i < th_num; i++) {
    //     thrs[i]->join();
    // }
    wg.wait();
    LIBCO_LOG << "final count = " << count;
    return 0;
}